package mf.com.uilts;

import lombok.Setter;
import mf.com.vo.common.Tree.TreeNode;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Setter
public class TreeBuilder<T extends TreeNode<T>> {
    public static <T extends TreeNode<T>> List<T> buildTree(List<T> list) {
        // 创建一个map用于快速查找节点
        Map<Integer, T> nodeMap = new HashMap<>();
        for (T node : list) {
            System.out.println(node.getId());
            nodeMap.put(node.getId(), node);
        }

        List<T> tree = new ArrayList<>();

        // 遍历列表，构建树结构
        for (T node : list) {
            if (node.getParentId().equals(0)) {
                // 根节点，直接添加到结果列表中
                tree.add(node);
            } else {
                // 非根节点，找到其父节点并添加到父节点的子节点列表中
                T parentNode = nodeMap.get(node.getParentId());
                if (parentNode != null) {
                    if (parentNode.getChildren() == null) {
                        parentNode.setChildren(new ArrayList<>());
                    }
                    parentNode.getChildren().add(node);
                }
            }
        }

        // 返回构建好的树
        return tree;
    }
}